<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        function  jingshenxiaohuo(){
            const p = new Promise(function(resolve,reject){
                const timer = Math.random() * 1000 + 2000;
                if(timer<2500){
                    console.log('成功');
                    resolve('辣子鸡好了');

                }else{
                    console.log('失败');
                    reject('辣子鸡没了');
                }
            })
            return p;
        }

        // jingshenxiaohuo().then(function(data){
        //     console.log(data);
        // }).catch(function(err){
        //     console.log(err);
        // })
    
        // async function test(){
        //     const t1 = await jingshenxiaohuo();
        //     // jingshenxiaohuo()一定是个promise对象 
        //     // await 会等待promise对象的成功状态 
        //     // await 会把promise对象的成功状态的值返回
        //     // 不能返回失败状态的值
        //     // 只要失败 后边不执行了  

        //     console.log('第1次',t1);
        //     const t2 = await jingshenxiaohuo();
        //     console.log('第2次',t1);
        //     const t3 = await jingshenxiaohuo();
        //     console.log('第3次',t1);
        //     const t4 = await jingshenxiaohuo();
        //     console.log('第4次',t1);
        // }

        // test();

        // await 只能接收promise对象 成功 状态  
        // await 不能接收promise对象 失败 状态 程序停止运行


        //因为async 只能 接收 promise对象成功对象 
        // 失败 终止程序的运行

        // 解决方案  


     // try catch  
     // 异常处理机制  

     // try{执行的代码} catch{如果try中的代码出现异常,就会执行catch中的代码}
     // 好处是 代码不会终止运行
     // 手动捕获错误 

    //  async function test(){
    //         try{
    //             const t1 = await jingshenxiaohuo();
    //             console.log('第1次',t1);
    //         }
    //         catch{
    //             console.log('捕捉到错误的');
    //         }
    //         try{
    //             const t2 = await jingshenxiaohuo();
    //             console.log('第2次',t1);
                
    //         }
    //         catch{
    //             console.log('捕捉2到错误的');
    //         }
    //     }

    //     test();

    // 解决方案2  改变封装思路 
    // 让promise对象百分之百成功  
    // 成功和失败都按照 resolve 执行 
    // 可以加一个参数 用来区分成功还是失败  

    function jingshenxiaohuo2(){
        const p2 = new Promise(function(resolve,reject){
        const time = Math.random()*2000+1000;
        setTimeout(()=>{
            if(time<2500){
                resolve({code:200,message:'辣子鸡好了'})
            }
            else{
                resolve({code:404,message:'辣子鸡没了'})
            }
        })
    
    });
        return p2;
    }

    async function fn2(){
        const r1 = await jingshenxiaohuo2();
        // console.log(r1)
        if(r1.code == 404 ){
            console.log('1失败的状态');
        }

        const r2 = await jingshenxiaohuo2();
        // console.log(r1)
        if(r2.code == 404 ){
            console.log('2失败的状态');
        }


        const r3 = await jingshenxiaohuo2();
        // console.log(r1)
        if(r3.code == 404 ){
            console.log('3失败的状态');
        }


    }

    fn2();
    </script>
</body>
</html>